package com.vend.common.db;

import android.content.Context;
import android.content.ContextWrapper;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import com.vend.common.db.commondata.CommonData;
import java.io.File;
import java.io.IOException;

/**
 * @ProjectName: greenDAO-master
 * @Package: org.greenrobot.greendao.example
 * @ClassName: GreenDaoContext
 * @Description: java类作用描述
 * @Author: lilyguan
 * @CreateDate: 5/12/20 14:01
 * @UpdateDate: 5/12/20 14:01
 */
public class GreenDaoContext extends ContextWrapper {

    public String unitDir = "ydjc";//一般用来针对一个用户一个数据库，以免数据混乱问题
    private Context mContext;

    public GreenDaoContext(Context context) {
        super(context);
        this.mContext = context;
    }

    /**
     * 获得数据库路径，如果不存在，则创建对象
     *
     * @param dbName
     */
    @Override
    public File getDatabasePath(String dbName) {
        String dbDir = Environment.getExternalStoragePublicDirectory("").getPath();

        if (TextUtils.isEmpty(dbDir)){
            Log.e("SD卡管理：", "SD卡不存在，请加载SD卡");
            return null;
        }
        File baseFile = new File(dbDir);
        if (!baseFile.exists()){
            baseFile.mkdirs();
        }

        // 数据库所在目录
        StringBuffer buffer = new StringBuffer();
        buffer.append(baseFile.getPath());
        buffer.append(File.separator);
        buffer.append(unitDir);
        dbDir = buffer.toString();
        File dbDirFile = new File(dbDir);
        // 目录不存在则自动创建目录
        if (!dbDirFile.exists()){
            dbDirFile.mkdirs();
        }

        // 数据库路径
        buffer.append(File.separator);
        buffer.append(dbName);
        String dbPath = buffer.toString();

        // 数据库文件是否创建成功
        boolean isFileCreateSuccess = false;
        // 判断文件是否存在，不存在则创建该文件
        File dbFile = new File(dbPath);
        if (!dbFile.exists()) {
            //新安装
            String versionCode = CommonData.getInstance().getVersionCode();
            if (TextUtils.isEmpty(versionCode)) {
                try {
                    isFileCreateSuccess = dbFile.createNewFile();// 创建文件
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                isFileCreateSuccess = false;

            }

        } else
            isFileCreateSuccess = true;

        // 返回数据库文件对象
        if (isFileCreateSuccess)
            return dbFile;
        else
            return super.getDatabasePath(dbName);
    }

    /**
     * 重载这个方法，是用来打开SD卡上的数据库的，android 2.3及以下会调用这个方法。
     *
     * @param name
     * @param mode
     * @param factory
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
        return result;
    }

    /**
     * Android 4.0会调用此方法获取数据库。
     *
     * @param name
     * @param mode
     * @param factory
     * @param errorHandler
     * @see ContextWrapper#openOrCreateDatabase(String, int,
     * SQLiteDatabase.CursorFactory,
     * DatabaseErrorHandler)
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);

        return result;
    }
}
